using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace FiltronASP.Models.DAO.Interfaces
{
    /// <summary>
    /// Interfejs dla operacji bazodanowych specyficznych dla tabeli <code>galleries</code>.
    /// </summary>
    public interface IGalleryDAO : IGenericDAO<Gallery, System.Nullable<int>>
    {
        /// <summary>
        /// Pobieranie listy obiektow na podstawie ich szablonu i języka.
        /// </summary>
        /// <param name="templateId">szablon</param>
        /// <param name="languageId">język</param>
        /// <returns>lista rekordow o zadanym szablonie i języku</returns>
        IQueryable<Gallery> FindByTemplateIdAndLanguageId(int templateId, int languageId);

        /// <summary>
        /// Pobieranie listy obiektow na podstawie ich języka.
        /// </summary>
        /// <param name="languageId">język</param>
        /// <returns>lista rekordow o zadanym języku</returns>
        IQueryable<Gallery> FindByLanguageId(int languageId);

        /// <summary>
        /// Pobieranie obiektu na podstawie ich języka i szablonu.
        /// </summary>
        /// <param name="templateId">szablon</param>
        /// <param name="languageId">język</param>
        /// <returns>rekord o zadanym języku i szablonie</returns>
        Gallery FindByNameAndLanguageId(string name, int languageId);

        /// <summary>
        /// Wstawianie listy obiektów na podstawie jezyka.
        /// </summary>
        /// <param name="defaultLanguageId">domyslny jezyk</param>
        /// <param name="newLanguageId">nowy jezyk</param>
        /// <returns>true jesli sie udalo, false wpp</returns>
        bool InsertForNewLanguage(int defaultLanguageId, int newLanguageId);

        /// <summary>
        /// Usuwanie obiektow po jezyku.
        /// </summary>
        /// <param name="languageId">jezyk</param>
        /// <returns>true dla sukcesu, false w przeciwnym razie</returns>
        bool DeleteByLanguage(int languageId);
    }
}
